import _ from 'lodash'

/** 
 * 基数帧数的节流函数，比setTimeout时间更精确 
 * 1帧约为16.66666ms
 */
export function frameThrottle(callback, max = 5){
  let count = 0;
  let raf = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
  let timer = function(){
    count++;
    count <= max && raf(timer);
  }
  
  return function(){  
    if(count >= max){
      count = 0;
      return callback.apply(this, arguments);
    }
    
    timer();
  };
}

/**  
 * 判断当前
*/
export function isEmptyStringObject(object = {}){
  if(!object || Object.keys(object).length <= 0 ) return true;
  
  let isEmpty = true;
  let item = null;

  for(let key in object) {
    item = object[key];
    if(String(item)) {
      isEmpty = false;
      break;
    }
  }

  return isEmpty;

}

export function debounce(callback) {  
  _.debounce(callback, 300)()
}
/**
 * el-cascader加上点击label选中的效果
*/
export function clickLabel(className){
  const element=document.getElementsByClassName(className)[0];
    if(element){
      element.removeEventListener('click',handleClick);
      element.addEventListener('click',handleClick);
    }else{
      setTimeout(()=>{
        clickLabel(className);
      },300);
    }
}

function handleClick(e){
  if(e.target.className==='el-cascader-node__label'){
    e.target.previousElementSibling.click();
  }
}

/**
 * 判断是否在本地启动
*/
export function isLocal(){
  return window.location.protocol==='http:';
}


/**
 * 判断是否是子表单 || 判断不支持消息的控件
*/
export function isSubForm(field) {
  const { formType } = field;
  return (
    formType === 'subForm' ||
    formType === 'autograph'||
    formType === 'info' ||
    formType === 'separator' ||
    formType === 'inStock' ||
    formType === 'outStock' ||
    formType === 'lackStock' ||
    formType === 'sparepart' ||
    formType === 'serviceItem' ||
    formType === 'product' ||
    formType === 'qualityResult' ||
    formType === 'materialOrder' ||
    formType === 'material' ||
    formType === 'backCheck' ||
    formType === 'dispatchFix' ||
    formType === 'materialApply' ||
    formType === 'outOrder' ||
    formType === 'outWarehouse' ||
    formType === 'outSparepart' ||
    formType === 'inWarehouse' ||
    formType === 'inSparepart' ||
    formType === 'pay' || 
    formType === 'serviceProvider' ||
    formType === 'relatedData' || 
    formType === 'attachment' ||
    formType === 'logistics' || 
    formType === 'richText'
  );
}


/**
 * 项目管理消息设置-任务消息设置|| 判断支持消息的控件
*/
export function canUseField(field) {
  const { formType } = field;
  return (
    formType === 'text' || // 单行文本
    formType === 'textarea' || // 单行文本
    formType === 'number' || // 数字
    formType === 'select' || // 下拉菜单
    formType === 'cascader' || // 多级菜单
    formType === 'user' || // 人员
    formType === 'date' || // 日期
    formType === 'datetime' || // 日期时间
    formType === 'phone' || // 电话
    formType === 'email' || // 邮箱
    formType === 'address' || // 地址
    formType === 'location' ||  // 位置
    formType === 'planStartTime' || // 计划开始时间
    formType === 'planEndTime' || // 计划结束时间
    formType === 'product' || // 产品
    formType === 'customer' || // 客户
    formType === 'projectCustomer' || // 项目管理客户联系人
    formType === 'linkman' || // 客户联系人
    formType === 'customerAddress' // 客户地址
  );
}


